Apple II Technical Notes _____________________________________________________________________________ Developer Technical Support Apple II Miscellaneous #10: 80-Column GetChar Routine Revised by: Pete McDonald November 1988 Written by: Cameron Birse December 1986 This Technical Note presents an 80-column GetChar routine. _____________________________________________________________________________ The following is an example of how to display a string on the 80-column screen, reposition the cursor at the beginning of the string, and use the right arrow to get characters which are already there or accept new characters in their place. The routine is a simple BASIC program which displays the string and repositions the cursor before getting incoming characters. If the character input is a right arrow, the program calls the assembly language routine to get the character from screen memory at the current cursor location. 10 PRINT CHR$ (4);"bload getchar.0": REM first install assembly routine 20 B$ = "hello" 30 PRINT CHR$ (4);"pr#3" 40 PRINT B$;:B$ = "" 50 A = PEEK (1403): REM get horiz location 60 A = A - 5: REM move cursor to beginning of string 70 POKE 1403,A 80 GET A$: REM get a character 90 IF A$ = CHR$ (21) THEN GOSUB 130: REM if char is forward arrow, handle with assembly routine (GETCHAR) 100 IF A$ = CHR$ (27) THEN 170: REM if esc key then we're done 110 PRINT A$;:B$ = B$ + A$ 120 GOTO 80 130 CALL 768: REM GETCHAR 140 A = PEEK (6) 150 A$ = CHR$ (A) 160 RETURN 170 PRINT : PRINT : PRINT B$: REM and we're done An assembled listing of the assembly language GetChar routine follows on the next page. SOURCE FILE #01 =>GETCHAR ----- NEXT OBJECT FILE NAME IS GETCHAR.0 0300: 0300 1 ORG $300 0300: C01F 2 RD80VID EQU $C01F ;80 COLUMN STATE 0300: C054 3 TXTPAGE1 EQU $C054 ;TURN OFF PAGE 2 (READ) 0300: C055 4 TXTPAGE2 EQU $C055 ;TURN ON PAGE 2 (READ) 0300: C000 5 CLR80COL EQU $C000 ;TURN OFF 80 STORE (WRITE) 0300: C001 6 SET80COL EQU $C001 ;TURN ON 80 STORE (WRITE) 0300: 0028 7 BASL EQU $28 ;BASE ADDRESS OF SCREEN LOCATION 0300: 0029 8 BASH EQU $29 0300: 057B 9 OURCH EQU $57B ;80 COLUMNS HORIZ. POSITION 0300: 05FB 10 OURCV equ $5fb ;80 col vertical pos 0300: 0006 11 char equ 6 ;place to hand character back to basic 0300: 12 * 0300: 13 ************************************************************* 0300: 14 * GETCHAR - This routine gets an ascii character from the * 0300: 15 * 80 column display memory of the Apple IIe. It assumes * 0300: 16 * that main memory is switched in and that the base addrs * 0300: 17 * of the line has already been calculated and resides * 0300: 18 * in BASL and BASH. It is meant to be called from BASIC * 0300: 19 * as follows: * 0300: 20 * CALL 768 * 0300: 21 * A = PEEK (6) * 0300: 22 * A$ = CHR$(A) * 0300: 23 * As you can see, the character is returned in location * 0300: 24 * $6 in zero page. This routine is offered as an example. * 0300: 25 * No guaranties are made regarding its fitness for any * 0300: 26 * purpose. By Cameron Birse 6/10/86 * 0300: 27 ************************************************************* 0300: 28 * 0300: 0300 29 getchr equ * ;get the char at the current cursor loc. 0300:A9 01 30 lda #$01 ;mask for horiz test 0302:2C 7B 05 31 bit OURCH ;are we in main or aux mem? 0305:D0 17 031E 32 bne main ;if bit 0 of OURCH is set, then main mem 0307: 0307 33 aux equ * 0307:AD 7B 05 34 lda OURCH ;get horiz pos. 030A:18 35 clc ;clear the carry for divide 030B:6A 36 ror a ;divide by two 030C:A8 37 tay ;put the result in y 030D:8D 01 C0 38 sta SET80COL ;turn on 80 store 0310:AD 55 C0 39 lda TXTPAGE2 ;flip to aux text page 0313:B1 28 40 lda (basl),y ;get the character 0315:85 06 41 sta char 0317:AE 54 C0 42 ldx TXTPAGE1 ;turn off aux text page 031A:8D 00 C0 43 sta CLR80COL ;turn off 80 store 031D:60 44 rts 031E: 031E 45 main equ * 031E:AD 7B 05 46 lda OURCH ;get horiz pos. 0321:18 47 clc ;clear the carry for divide 0322:6A 48 ror a ;divide by two 0323:A8 49 tay ;put the result in y 0324:B1 28 50 lda (basl),y ;get the character 0326:85 06 51 sta char 0328:60 52 rts Further Reference o Apple IIGS Firmware Reference o Apple IIe Technical Reference Manual o Apple IIc Technical Reference Manual